package Business;

/**
 * @Author: Cjj
 * 使用业务代表模式
 *  用于对表示层和业务层解耦，它基本上是用来减少通信或对表示层代码中的业务层代码的远程查询功能
 *  客户端(Client)：表示层代码可以是JSP servlet或UI java代码
 *  业务代表(Business Delegate)：一个为客户端实体提供的入口类,它提供了对业务服务方法的访问。
 *  查询服务(LookUp Service) 查找服务对象负责获取相关的业务实现,并提供业务对象对业务代表对象的访问
 *  业务服务(Business Service)：它提供了实际的业务逻辑功能，客户端不直接访问它，而是通过业务代表。
 *
 * 优点：
 *  表示层与业务逻辑层解耦：业务代表为中间层,降低耦合度
 *  集中访问逻辑：简化表示层的代码,将访问逻辑集中在业务代表中
 *  易于维护和扩展：添加新的业务逻辑访问时，只需修改业务代表
 *
 * 缺点：可能增加复杂性：对于简单应用程序,可能增加不必要的抽象层次
 */
public class BusinessDelegatePatternDemo {
    public static void main(String[] args) {
        BusinessDelegate businessDelegate = new BusinessDelegate();
        businessDelegate.setServiceType("EJB");

        Client client = new Client(businessDelegate);
        client.doTask();

        businessDelegate.setServiceType("JMS");
        client.doTask();
    }
}
